package com.example.managemyself.viewmodel;

import android.app.Application;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import java.util.List;

import com.example.managemyself.data.model.Task;
import com.example.managemyself.data.repository.ITaskRepository;
import com.example.managemyself.data.repository.RepositoryFactory;
// import com.example.managemyself.data.repository.TaskRepository;

/**
 * 任务ViewModel，处理任务相关的UI逻辑
 */
public class TaskViewModel extends AndroidViewModel {
    
    private final ITaskRepository repository;
    private final LiveData<List<Task>> allTasks;
    private final MutableLiveData<Task> selectedTask = new MutableLiveData<>();
    
    public TaskViewModel(Application application) {
        super(application);
        repository = RepositoryFactory.getTaskRepository(application);
        allTasks = repository.getAllTasks();
    }
    
    // 获取所有任务
    public LiveData<List<Task>> getAllTasks() {
        return allTasks;
    }
    
    // 根据状态获取任务
    public LiveData<List<Task>> getTasksByStatus(String status) {
        return repository.getTasksByStatus(status);
    }
    
    // 根据类型获取任务
    public LiveData<List<Task>> getTasksByType(String type) {
        return repository.getTasksByType(type);
    }
    
    // 根据重要程度获取任务
    public LiveData<List<Task>> getTasksByImportance(int importance) {
        return repository.getTasksByImportance(importance);
    }
    
    // 根据标签获取任务
    public LiveData<List<Task>> getTasksByTag(String tag) {
        return repository.getTasksByTag(tag);
    }
    
    // 根据优先级获取任务
    public LiveData<List<Task>> getTasksByPriority(String priority) {
        return repository.getTasksByPriority(priority);
    }
    
    // 根据紧急程度获取任务
    public LiveData<List<Task>> getTasksByUrgency(String urgency) {
        return repository.getTasksByUrgency(urgency);
    }
    
    // 插入任务
    public void insertTask(Task task) {
        repository.insertTask(task);
    }
    
    // 更新任务
    public void updateTask(Task task) {
        repository.updateTask(task);
    }
    
    // 删除任务
    public void deleteTask(Task task) {
        repository.deleteTask(task);
    }
    
    // 根据ID删除任务
    public void deleteTaskById(int id) {
        repository.deleteTaskById(id);
    }
    
    // 设置选中的任务
    public void selectTask(Task task) {
        selectedTask.setValue(task);
    }
    
    // 获取选中的任务
    public LiveData<Task> getSelectedTask() {
        return selectedTask;
    }
    
    // 根据ID获取任务
    public LiveData<Task> getTaskById(int id) {
        return repository.getTaskById(id);
    }
    
    // 创建新任务
    public Task createNewTask(String title, String description) {
        return new Task(title, description);
    }
    
    // 刷新任务数据
    public void refreshTasks() {
        // 由于LiveData会自动更新，这里不需要特殊处理
        // 但为了兼容性，保留这个方法
    }
    
    // 获取指定日期完成的任务（同步方法）
    public List<Task> getCompletedTasksByDateSync(java.util.Date date) {
        return repository.getCompletedTasksByDateSync(date);
    }
    
    // 获取指定日期完成的任务（异步方法）
    public LiveData<List<Task>> getCompletedTasksByDate(String dateStr) {
        return repository.getCompletedTasksByDate(dateStr);
    }
}
